/*
 * @Descripttion: 写点什么
 * @version: 
 * @Author: Zhaocy
 * @Date: 2024-07-29 14:03:43
 * @LastEditors: Zhaocy
 * @LastEditTime: 2024-07-30 16:08:05
 */
package com.zhike.mapper.group;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhike.common.dto.GroupInfo4Cache;
import com.zhike.common.dto.GroupMemberEntity;
import com.zhike.common.model.GroupBase;
import com.zhike.common.vo.GroupIdUserIdVO;
import com.zhike.common.vo.GroupMemberCountVO;
import com.zhike.common.vo.UserAvatarVO;

public interface GroupBaseMapper extends BaseMapper<GroupBase> {
        /**
         * 查询所有的群成员
         * 
         * @return
         */
        List<GroupIdUserIdVO> queryGroupAllData();

        List<GroupInfo4Cache> selectGroupName(@Param("groupId") String groupId);

        List<GroupBase> queryGroupInfoList(@Param("uId") String uId);

        /**
         * 查询群信息
         * 
         * @param gid
         * @param myUserId
         * @return
         */
        GroupBase queryGroupInfo(@Param("gId") String gid, @Param("myUserId") String myUserId);

        /**
         * 新建群
         *
         * @param newGid    newGid
         * @param status    status
         * @param groupName groupName
         * @param ownerUid  ownerUid
         * @return 结果
         */
        Integer insertGroupBase(@Param("newGid") String newGid,
                        @Param("status") Integer status,
                        @Param("groupName") String groupName,
                        @Param("ownerUid") String ownerUid,
                        @Param("memberCount") Integer count);

        /**
         * 新增邀请去群请求
         *
         * @param uid       uid
         * @param friendUid friendUid
         * @param desc      desc
         * @param ip        ip
         * @param time      time
         * @param gId       gId
         * @return 结果
         */
        Integer insertGroupRequestData(@Param("uid") String uid,
                        @Param("friendUid") String friendUid,
                        @Param("desc") String desc,
                        @Param("ip") String ip,
                        @Param("time") Long time,
                        @Param("gId") String gId);

        /**
         *    * 新增群成员
         *    *
         *    * @param userUid  userUid
         *    * @param newGid   newGid
         *    * @param ownerUid ownerUid
         *    * @param isAdmin  是否是管理员
         *    * @return 结果
         *    
         */
        Integer prepareInsertMemberToGroup(@Param("userUid") String userUid,
                        @Param("newGid") String newGid,
                        @Param("beInviteUid") String beInviteUid,
                        @Param("beOwnerTime") Date beOwnerTime,
                        @Param("nicknameInGroup") String nicknameInGroup,
                        @Param("isAdmin") Integer isAdmin);

        /**
         * 更新群成员人数
         *
         * @param newGid newGid
         * @return 结果
         */
        Integer prepareUpdateGroupMemberCount(@Param("newGid") String newGid);

        /**
         * 拼合群头像时，使用的群员头像数
         * 
         * @param gid
         * @return
         */
        GroupMemberCountVO queryGroupMemberCount(@Param("groupId") String gid);

        /**
         * 查询该群中9个用户的头像文件名
         *
         * @param groupId groupId
         * @return 结果
         */
        List<UserAvatarVO> queryGroupUserHeadOrderNine(@Param("groupId") String groupId);

        /**
         * 更新数据中本次拼合头像的人数
         *
         * @param size    数量
         * @param groupId groupId
         */
        Integer updateGroupAvatarIncludeCnt(@Param("size") Integer size,
                        @Param("groupId") String groupId);

        /**
         * 设置群管理员
         *
         * @param isAdmin isAdmin
         * @param gid     gid
         * @param uid     uid
         * @return 结果
         */
        Integer updateGroupAdminPerson(@Param("isAdmin") Integer isAdmin,
                        @Param("gid") String gid,
                        @Param("uid") String uid);

        /**
         * 修改群名称
         *
         * @param newGroupName newGroupName
         * @param gid          gid
         * @return 结果
         */
        Integer updateGroupName(@Param("newGroupName") String newGroupName,
                        @Param("desc") String desc,
                        @Param("gid") String gid);

        /**
         * 更新群头像
         */
        Integer updateGroupAvatar(@Param("avatar") String avatar,
                        @Param("gid") String gid,
                        @Param("avatarUpdatetime") Long avatarUpdatetime);

        /**
         * 修改"我"的群昵称接口
         *
         * @param nicknameIngroup 昵称
         * @param gid             gid
         * @param userUid         uid
         * @return 结果
         */
        Integer updateGroupUserNickName(@Param("nicknameIngroup") String nicknameIngroup,
                        @Param("gid") String gid,
                        @Param("userUid") String userUid);

        /**
         * 查询是否是群主
         *
         * @param gId              gId
         * @param gNoticeUpdateuid gNoticeUpdateuid
         * @return 结果
         */
        Integer queryGroupOwner(@Param("gId") String gId,
                        @Param("gNoticeUpdateuid") String gNoticeUpdateuid);

        /**
         * 修改群公告
         *
         * @param gNotice          gNotice
         * @param gNoticeUpdateuid gNoticeUpdateuid
         * @param gId              gId
         * @return 结果
         */
        Integer updateGroupNotice(@Param("gNotice") String gNotice,
                        @Param("gNoticeUpdateuid") String gNoticeUpdateuid,
                        @Param("noticeUpdatetime") Long noticeUpdatetime,
                        @Param("gId") String gId);

        /**
         * 删除群成员或退群接口
         *
         * @param gid    gid
         * @param userId userId
         * @return 结果
         */
        Integer deleteGroupPerson(@Param("gid") String gid, @Param("userId") String userId);

        /**
         * 根据群 id 查询管理员
         *
         * @param gId gId
         * @return 结果
         */
        List<GroupMemberEntity> queryAdminByGId(@Param("gId") String gId);

        /**
         * 查询人员在群中是否存在
         *
         * @param gid    gid
         * @param userId userId
         * @return 结果
         */
        Integer queryGrouppersonCount(@Param("gid") String gid, @Param("userId") String userId);

        /**
         * 设置新群主
         *
         * @param newOwnerUid 新 uid
         * @param gid         群 id
         * @param oldOwnerUid 老 uid
         * @return 结果
         */
        Integer updateGroupMaster(@Param("newOwnerUid") String newOwnerUid,
                        @Param("gid") String gid,
                        @Param("oldOwnerUid") String oldOwnerUid);

        /**
         * 更新新群主成为群主的时间
         *
         * @param gid         群 id
         * @param newOwnerUid uid
         * @return 结果
         */
        Integer updateGroupMasterTime(@Param("gid") String gid,
                        @Param("newOwnerUid") String newOwnerUid);

        /**
         * 根据群 id 删除所有群成员
         *
         * @param gid gid
         * @return 结果
         */
        Integer deleteGroupAllPersonByGroupId(@Param("gid") String gid);

        /**
         * 更新群基本信息中的状态字段
         *
         * @param ownerUid ownerUid
         * @param gid      gid
         * @return 结果
         */
        Integer updateGroupBaseStatus(@Param("ownerUid") String ownerUid,
                        @Param("gid") String gid);

        /**
         * 查询指定群组的群成员列表
         *
         * @param gid gid
         * @return 集合
         */
        List<GroupMemberEntity> queryGroupMemberList(@Param("gid") String gid, @Param("userId") String userId);

        /**
         * 根据群 id 和好友 id 查询请求数量
         *
         * @param gId           gId
         * @param friendUserUid friendUserUid
         * @return 结果
         */
        Integer queryGroupRequestCountByUidFriendUid(@Param("gid") String gId,
                        @Param("friendUserUid") String friendUserUid);

        /**
         * 修改入群请求时间
         *
         * @param desc      desc
         * @param time      time
         * @param uid       uid
         * @param friendUid friendUid
         * @param gId       gId
         * @return 结果
         */
        Integer updateGroupRequestTime(@Param("desc") String desc,
                        @Param("time") Long time,
                        @Param("uid") String uid,
                        @Param("friendUid") String friendUid,
                        @Param("gId") String gId);
}
